//放一些应用层通用函数以及临时测试函数

#include "common.h"
UART_HandleTypeDef huart8={0}; //UART句柄
void _putchar(char character) {
    uart8_send(&character,1);
}

void uart8_init(void)
{
    // u32 gpcom_sel = GPCOM8_BASE_ADDR;
    // INTDEV_SET_CLK_RST(gpcom_sel, (INTDEV_RUN | INTDEV_IS_GROUP0 | INTDEV_CLK_IS_CORECLK_DIV16));  //前两个参数不用管 最后一个是系统时钟分频

    // GPCOM_SET_IN_PORT(gpcom_sel, (GPCOM_RXD_IS_P0));
    // GPCOM_SET_OUT_PORT(gpcom_sel, (\
    //     GPCOM_P2_OUTPUT_DISABLE | GPCOM_P1_OUTPUT_ENABLE | GPCOM_P0_OUTPUT_DISABLE | GPCOM_P3_OUTPUT_DISABLE | \
    //     GPCOM_P2_IS_HIGH | GPCOM_P1_IS_TXD | GPCOM_P0_IS_HIGH | GPCOM_P3_IS_HIGH \
    //     ));
    // GPCOM_SET_COM_MODE(gpcom_sel, GPCOM_UART_MODE);
    // GPCOM_SET_COM_SPEED(gpcom_sel, 12500000, 115200);
    // GPCOM_SET_OVERRIDE_GPIO(gpcom_sel, (\
    //     GPCOM_P0_OVERRIDE_GPIO | GPCOM_P0_INPUT_ENABLE | \
    //     GPCOM_P1_OVERRIDE_GPIO \
    //     ));

    huart8.Instance=GPCOM8;					            //GPCOM8
	huart8.Init.BaudRate=1000000;				        //波特率
	huart8.Init.PinRxd=HAL_PIN_P0;                      //接收脚
	huart8.Init.PinTxd=HAL_PIN_P1;		                //发送脚
	HAL_UART_Init(&huart8);	

    // GPCOM8->CR=INTDEV_RUN | INTDEV_IS_GROUP0 | INTDEV_CLK_IS_CORECLK_DIV16;
    // GPCOM8->ICR=GPCOM_RXD_IS_P0;
    // GPCOM8->OCR=GPCOM_P2_OUTPUT_DISABLE | GPCOM_P1_OUTPUT_ENABLE | GPCOM_P0_OUTPUT_DISABLE | GPCOM_P3_OUTPUT_DISABLE | \
    //             GPCOM_P2_IS_HIGH |      GPCOM_P1_IS_TXD |       GPCOM_P0_IS_HIGH |        GPCOM_P3_IS_HIGH ;
    // GPCOM8->CR1=GPCOM_UART_MODE;
    // GPCOM8->CR2=(((12500000/115200)-1)<<8)+(12500000/115200)/2-2;
    // GPCOM8->IOCR=GPCOM_P0_OVERRIDE_GPIO | GPCOM_P0_INPUT_ENABLE | GPCOM_P1_OVERRIDE_GPIO;


}

void uart8_send(u8* buf, u16 len)
{
    HAL_UART_Transmit(&huart8,buf,len,HAL_WAIT_FOREVER);
}






//实现pow()函数
double mypow(double num, double n)
{
     double value = 1;
     int i = 1;
     if (n == 0)
     {
         value = 1;
     }
     else
     {
         while (i++ <= n)
         {
             value *= num;
         }
     }
     return value;
 }
int result(int x, int y)
{
    int num = 1;
    for (int i = 1; i <= y; i++) {
        num *= x;
    }
    return num;
}